// Copyright Epic Games, Inc. All Rights Reserved.  // 版权声明，Epic Games公司保留所有权利

#include "LyraTaggedActor.h"  // 包含类头文件
#include "UObject/UnrealType.h"  // 包含Unreal类型系统的头文件

#include UE_INLINE_GENERATED_CPP_BY_NAME(LyraTaggedActor)  // 包含由UHT生成的内联代码

/**
 * ALyraTaggedActor类的构造函数
 * @param ObjectInitializer - 对象初始化器，用于初始化UObject属性
 */
ALyraTaggedActor::ALyraTaggedActor(const FObjectInitializer& ObjectInitializer)
	: Super(ObjectInitializer)  // 调用父类AActor的构造函数
{
}

/**
 * 实现IGameplayTagAssetInterface接口的GetOwnedGameplayTags函数
 * 将拥有的Gameplay标签添加到传入的容器中
 * @param TagContainer - 输出参数，用于接收Gameplay标签的容器
 */
void ALyraTaggedActor::GetOwnedGameplayTags(FGameplayTagContainer& TagContainer) const
{
	TagContainer.AppendTags(StaticGameplayTags);  // 将StaticGameplayTags中的标签追加到传入的容器中
}

#if WITH_EDITOR  // 条件编译，仅在编辑器模式下包含以下代码
/**
 * 重写CanEditChange函数，控制属性在编辑器中的可编辑状态
 * @param InProperty - 要检查的属性指针
 * @return bool - 返回该属性是否可以被编辑
 */
bool ALyraTaggedActor::CanEditChange(const FProperty* InProperty) const
{
	// 防止编辑其他标签属性（即AActor类的Tags属性）
	if (InProperty->GetFName() == GET_MEMBER_NAME_CHECKED(AActor, Tags))  // 检查属性是否为AActor的Tags属性
	{
		return false;  // 返回false，禁止编辑Tags属性
	}

	return Super::CanEditChange(InProperty);  // 对于其他属性，调用父类的实现
}
#endif